package ar.uba.is2.common.mensaje.test2;

import static ar.uba.is2.common.mensaje.MensajeTestContext.componente1;
import static ar.uba.is2.common.mensaje.MensajeTestContext.componente2;
import static ar.uba.is2.common.mensaje.MensajeTestContext.crearMensaje;
import static ar.uba.is2.common.mensaje.MensajeTestContext.imprimirMensaje;

import java.io.File;
import java.io.IOException;

import ar.uba.is2.common.mensaje.Mensaje;
import ar.uba.is2.common.mensaje.exception.EnviandoMensajeException;
import ar.uba.is2.common.mensaje.exception.LeyendoMensajeException;
import ar.uba.is2.common.mensaje.puerto.PuertoEntrada;
import ar.uba.is2.common.mensaje.puerto.PuertoSalida;
import ar.uba.is2.common.mensaje.puerto.impl.PuertoArchivo;

public class SincronizarComponentesTest2 {
	
	public static final String pathComponente2 = "../comp2.txt";

	private PuertoSalida out;
	private PuertoEntrada in;

	public static void main(String[] args) {
		try {
			SincronizarComponentesTest2 sincComp = new SincronizarComponentesTest2(pathComponente2, SincronizarComponentesTest1.pathComponente1);
			
			sincComp.correr();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public SincronizarComponentesTest2(String pathEntrada, String pathSalida) throws IOException{
		File entrada = new File(pathEntrada);
		File salida = new File(pathSalida);
		
		PuertoArchivo puerto = new PuertoArchivo(entrada, salida);
		
		this.out = puerto;
		this.in = puerto;
	}
	
	public void correr(){
		try {
			Mensaje mensaje = in.leerMensaje();
			imprimirMensaje(componente1, mensaje);

			Mensaje respuesta = crearMensaje(componente2, componente1,
					"bien y vos?");

			out.enviarMensaje(respuesta);
			imprimirMensaje(componente2, respuesta);

			mensaje = in.leerMensaje();
			imprimirMensaje(componente1, mensaje);

			respuesta = crearMensaje(componente2, componente1,
					"nada. puto!");

			out.enviarMensaje(respuesta);
			imprimirMensaje(componente2, respuesta);

			mensaje = in.leerMensaje();
			imprimirMensaje(componente1, mensaje);

		} catch (EnviandoMensajeException e) {
			e.printStackTrace();
		} catch (LeyendoMensajeException e) {
			e.printStackTrace();
		}

	}
}